spec:
  versions:
  - name: v1
    schema:
      openAPIV3Schema: &schema
        description: |
          Описывает конфигурацию работы механизма Vertical Pod Autoscaler для указанного контроллера.

          Vertical Pod Autoscaler автоматически управляет ресурсами подов контроллера на основании исторических и текущих данных по утилизации ресурсов.
        properties:
          spec:
            properties:
              resourcePolicy:
                description: |
                  Определяет, как autoscaler рассчитывает рекомендации.

                  Может использоваться с целью ограничения рекомендаций для указанных контейнеров.

                  Если не указано, autoscaler рассчитывает рекомендации по ресурсам для всех контейнеров пода, без ограничений.
                properties:
                  containerPolicies:
                    description: Политики VPA для конкретных контейнеров.
                    items:
                      description: ContainerResourcePolicy контролирует, как autoscaler рассчитывает рекомендуемые ресурсы для конкретного контейнера.
                      properties:
                        containerName:
                          description: Имя контейнера или `DefaultContainerResourcePolicy` (политика для контейнеров по умолчанию).
                        controlledResources:
                          description: Указывает тип рекомендаций, которые будут рассчитаны (и, возможно, применены) VPA.
                          items:
                            description: Имя ресурса.
                        controlledValues:
                          description: Указывает, какие ресурсы контролируются.
                        maxAllowed:
                          description: |
                            Верхняя граница значений `cpu` и `memory`, которые могут быть рекомендованы для контейнера.

                            По умолчанию она не определена.
                        minAllowed:
                          description: |
                            Нижняя граница значений `cpu` и `memory`, которые могут быть рекомендованы для контейнера.

                            По умолчанию она не определена.
                        mode:
                          description: Включает или отключает работу VPA для контейнера.
              targetRef:
                description: |
                  Указывает на объект (контроллер в Kubernetes), к подам которого применяются описываемые политики VPA.

                  Поддерживаются все распространенные типы контроллеров: `Deployment`, `StatefulSet`, `DaemonSet`, `CronJobs`, а также любые пользовательские типы, реализующие подресурс scale.
                properties:
                  apiVersion:
                    description: Версия API объекта.
                  kind:
                    description: Тип объекта.
                  name:
                    description: Имя объекта.
              updatePolicy:
                description: |
                  Определяет правила, как изменения будут применяться к подам.

                  Если не указано, все поля `PodUpdatePolicy` принимают значения по умолчанию.
                properties:
                  updateMode:
                    description: |
                      Режим работы VPA-контроллера:
                      - `Auto` — в данный момент режимы работы Auto и Recreate делают одно и то же. Однако, когда в Kubernetes появится [Pod inplace resource update](https://github.com/kubernetes/design-proposals-archive/blob/main/autoscaling/vertical-pod-autoscaler.md#in-place-updates), данный режим будет делать именно его;
                      - `Recreate` — разрешает VPA изменять ресурсы у запущенных подов, то есть перезапускать их. В случае работы одного пода (replicas: 1) перезапуск приведет к временной недоступности сервиса. В данном режиме VPA не пересоздает поды, которые были созданы без контроллера;
                      - `Initial` — разрешает VPA изменять ресурсы подов, но только при их создании (не во время работы);
                      - `Off` — запрещает VPA автоматическое изменение ресурсов. Autoscaler подсчитывает рекомендации и хранит их в поле status объекта `VerticalPodAutoscaler`. Посмотреть, какие ресурсы рекомендует поставить VPA, можно с помощью команды `kubectl describe vpa <vpa-name>`.
          status:
            description: Текущая информация о работе VPA с объектом.
            properties:
              conditions:
                description: |
                  Описывает набор условий, требуемых autoscaler'у для масштабирования, и описывает состояние `VerticalPodAutoscaler`, показывая — выполнены ли эти условия.
                items:
                  properties:
                    lastTransitionTime:
                      description: Время последнего перехода из одного статуса в другой.
                    message:
                      description: Сообщение, поясняющее последнее изменение статуса.
                    reason:
                      description: Причина последнего изменения статуса.
                    status:
                      description: Статус условия (True, False, Unknown).
                    type:
                      description: Текущее состояние.
              recommendation:
                description: Последний рассчитанный объем ресурсов, рекомендуемый autoscaler'ом для контролируемых подов.
                properties:
                  containerRecommendations:
                    description: |
                      Рекомендация по ресурсам, вычисляемым autoscaler'ом для конкретного контейнера.

                      Соблюдается политика ресурсов контейнеров, если она присутствует в спецификации. В частности, рекомендация не применяется для контейнеров
                      с `ContainerScalingMode`, установленным в 'Off'.
                    items:
                      properties:
                        containerName:
                          description: Имя контейнера.
                        lowerBound:
                          description: Минимально рекомендуемое количество ресурсов. Этого количества может быть недостаточно для того, чтобы приложение работало стабильно.
                        target:
                          description: Рекомендуемое количество ресурсов.
                        uncappedTarget:
                          description: |
                            Последняя рекомендация по ресурсам, рассчитанная autoscaler'ом для контролируемых подов.

                            Базируется на текущем потреблении ресурсов, без учета политик.

                            Может отличаться от `recommendation`, если фактическое использование ресурсов ниже `MinAllowed` или
                            выше `MaxAllowed`.

                            Используется только как индикатор, не влияет на фактическое назначение ресурсов.
                        upperBound:
                          description: |
                            Максимально рекомендуемое количество ресурсов.

                            Любые ресурсы, выделенные сверх этого значения, скорее всего, будут потрачены впустую.

                            Это значение может быть больше, чем приложение способно использовать.
  - name: v1beta2
    schema:
      openAPIV3Schema: *schema
  - name: v1beta1
    schema:
      openAPIV3Schema: *schema
